package com.corpgovernment.supplier.vo.suppliercompany;

import com.corpgovernment.supplier.entity.db.MbSupplierInfo;
import com.corpgovernment.supplier.entity.db.SupplierCompany;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.beans.BeanUtils;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;

/**
 * @author jhxue
 */
@Data
@ApiModel("供应商配置实体类")
public class SupplierCompanyVo {
    /**
     * 主键
     */
    @ApiModelProperty("id")
    private Long id;
    /**
     * 公司编号
     */
    @NotBlank(message = "公司code不能为空")
    @ApiModelProperty("公司编号")
    private String companyCode;
    /**
     * 供应商code
     */
    @NotBlank(message = "供应商code不能为空")
    @ApiModelProperty("供应商code")
    private String supplierCode;
    /**
     * 供应商名称
     */
    @ApiModelProperty("供应商名称")
    private String supplierName;
    /**
     * 服务类型
     * 'flight','train','hotel','car'
     */
    @ApiModelProperty("服务类型")
    @NotBlank(message = "产线类型不能为空")
    private String productType;
    /**
     * true表示开启，false表示停用
     */
    @ApiModelProperty("true表示开启，false表示停用")
    @NotNull(message = "启停用不能为空")
    private Boolean isEnable;
    /**
     * 01-》1表示因公，10-》2表示因私 11-》3表示因公因私
     */
    @NotNull(message = "因公因私不能为空")
    @ApiModelProperty("01-》1表示因公，10-》2表示因私 11-》3表示因公因私")
    private Integer busPriType;
    /**
     * 供应商企业ID
     */
    @ApiModelProperty("供应商企业ID")
    private String supplierCorpId;

    /**
     * 供应商用户名
     */
    @ApiModelProperty("供应商用户名")
    private String supplierCorpUid;
    /**
     * 供应商主账户id
     */
    @ApiModelProperty("供应商主账户id")
    private String supplierAccountId;
    /**
     * 子账户代号
     */
    @ApiModelProperty("子账户代号")
    private String subAccountCode;

    /**
     * 开卡方式 X：一人一卡 V：虚拟卡
     */
    @ApiModelProperty("开卡方式 X：一人一卡 V：虚拟卡")
    private String openCardType;
    /**
     * 服务费获取类型 1从配置读取 2从服务商接口读取
     */
    @ApiModelProperty("服务费获取类型 1从配置读取 2从服务商接口读取")
    private Integer serviceFeeOptionType;
    /**
     * 1开启选择保险 2关闭选择保险 3强制购买保险
     */
    @ApiModelProperty("1开启选择保险 2关闭选择保险 3强制购买保险")
    private Integer insuranceOptionType;
    /**
     * 统一支付因公改签费
     */
    @ApiModelProperty("统一支付因公改签费")
    private BigDecimal accountPubRebookFee;
    /**
     * 统一支付因公退票费
     */
    @ApiModelProperty("统一支付因公退票费")
    private BigDecimal accountPubRefundFee;
    /**
     * 统一支付因公服务费
     */
    @ApiModelProperty("统一支付因公服务费")
    private BigDecimal accountPubServiceFee;
    /**
     * 统一支付因公代取票服务费
     */
    @ApiModelProperty("统一支付因公代取票服务费")
    private BigDecimal accountPubSubstituteTicketFee;
    /**
     * 个人支付因公改签费
     */
    @ApiModelProperty("个人支付因公改签费")
    private BigDecimal personalPubRebookFee;
    /**
     * 个人支付因公退票费
     */
    @ApiModelProperty("个人支付因公退票费")
    private BigDecimal personalPubRefundFee;
    /**
     * 个人支付因公服务费
     */
    @ApiModelProperty("个人支付因公服务费")
    private BigDecimal personalPubServiceFee;
    /**
     * 因私改签费
     */
    @ApiModelProperty("因私改签费")
    private BigDecimal priRebookFee;
    /**
     * 因私退票费
     */
    @ApiModelProperty("因私退票费")
    private BigDecimal priRefundFee;
    /**
     * 因私服务费
     */
    @ApiModelProperty("因私服务费")
    private BigDecimal priServiceFee;
    /**
     * 配送费
     */
    @ApiModelProperty("配送费")
    private BigDecimal deliveryFee;
    /**
     * 排序号
     */
    @ApiModelProperty("排序号")
    private Integer sortNum;

    /**
     * 统一支付-服务费计算方式
     * 1: 订单
     * 2: 间夜
     */
    @ApiModelProperty("统一支付-服务费计算方式 1: 订单 2: 间夜")
    private Integer accountPubServiceFeeWay;

    /**
     * 统一支付-协议酒店 服务费
     * 1: 不收
     * 2: 前收
     * 3: 后收
     */
    @ApiModelProperty("统一支付-协议酒店 1: 不收 2: 前收 3: 后收")
    private Integer accountPubContractSwitch;

    /**
     * 统一支付-协议酒店 服务费
     */
    @ApiModelProperty("统一支付-协议酒店 服务费")
    private BigDecimal accountPubContractServiceFee;

    /**
     * 统一支付-其他酒店 管控方式
     * 1: 不收
     * 2: 前收
     * 3: 后收
     */
    @ApiModelProperty("统一支付-其他酒店 管控方式 1: 不收 2: 前收 3: 后收")
    private Integer accountPubOtherSwitch;

    /**
     * 统一支付-其他酒店 服务费
     */
    @ApiModelProperty("统一支付-其他酒店 服务费")
    private BigDecimal accountPubOtherServiceFee;

    /**
     * 个人支付-服务费计算方式
     * 1: 订单
     * 2: 间夜
     */
    @ApiModelProperty("个人支付-服务费计算方式 1: 订单 2: 间夜")
    private Integer priServiceFeeWay;

    /**
     * 个人支付-协议酒店 服务费
     * 1: 不收
     * 2: 前收
     * 3: 后收
     */
    @ApiModelProperty("个人支付-协议酒店 服务费 1: 不收 2: 前收 3: 后收")
    private Integer priContractSwitch;

    /**
     * 个人支付-协议酒店 服务费
     */
    @ApiModelProperty("个人支付-协议酒店 服务费")
    private BigDecimal priContractServiceFee;

    /**
     * 个人支付-其他酒店 管控方式
     * 1: 不收
     * 2: 前收
     * 3: 后收
     */
    @ApiModelProperty("个人支付-其他酒店 管控方式1: 不收2: 前收3: 后收")
    private Integer priOtherSwitch;

    /**
     * 个人支付-其他酒店 服务费
     */
    @ApiModelProperty("个人支付-其他酒店 服务费")
    private BigDecimal priOtherServiceFee;

//    /**
//     * 个人支付因公-服务费计算方式
//     * 1: 订单
//     * 2: 间夜
//     */
//    private Integer personalPubServiceFeeWay;

    /**
     * 个人支付因公-协议酒店 服务费
     * 1: 不收
     * 2: 前收
     * 3: 后收
     */
    @ApiModelProperty("个人支付因公-协议酒店 服务费 1: 不收2: 前收3: 后收")
    private Integer personalPubContractSwitch;

    /**
     * 个人支付因公-协议酒店 服务费
     */
    @ApiModelProperty("个人支付因公-协议酒店 服务费")
    private BigDecimal personalPubContractServiceFee;

    /**
     * 个人支付因公-其他酒店 管控方式
     * 1: 不收
     * 2: 前收
     * 3: 后收
     */
    @ApiModelProperty("个人支付因公-其他酒店 管控方式 1: 不收2: 前收3: 后收")
    private Integer personalPubOtherSwitch;

    /**
     * 个人支付因公-其他酒店 服务费
     */
    @ApiModelProperty("个人支付因公-其他酒店 服务费")
    private BigDecimal personalPubOtherServiceFee;

    public static SupplierCompany toSupplierCompany(SupplierCompanyVo vo) {
        SupplierCompany entity = new SupplierCompany();
        BeanUtils.copyProperties(vo, entity);
        entity.setSupplierUid(vo.getSupplierCorpUid());
        return entity;
    }

    public static SupplierCompanyVo toSupplierCompanyVo(SupplierCompany entity, MbSupplierInfo mbSupplierInfo) {
        SupplierCompanyVo vo = new SupplierCompanyVo();
        BeanUtils.copyProperties(entity, vo);
        vo.setSupplierName(mbSupplierInfo.getSupplierName());
        vo.setSupplierCorpUid(entity.getSupplierUid());
        return vo;
    }
}
